iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
生成式 AI

RAG自己來系列:客服機器人系列 第 29

[Day 29] 進階應用 - 將所有服務包成 compose

  • 分享至 

  • xImage
  •  

前幾天把自己的系統建置起來後,最好能做到把專案帶著走的程度,所以除了將專案推上 Github 之外,也可以用 compose 的方式打包

首先要來想想,我們在整個專案中總共用到哪些服務和必要依賴

  1. Qdrant
  2. Ollama
  3. Nvidia GPU
  4. Pip modules

Qdrant 官方提供 docker image 供我們立即使用,Ollama 有提供指令搞,會在 Dockerfile 中進行安裝,掛載 GPU 的部分,Docker-compose 有提供掛載顯卡的功能,最後則是 pip 套件的部分,則使用 pip freeze 指令輸出即可

再來就來組裝各個部件吧

  • .dockerignore

由於工作目錄中並不是所有檔案都要複製到容器中,所以這邊我們寫一個 .dockerignore 避免多餘的檔案被複製到容器中

__pycache__/
venv/
saved_answer.csv
.env
  • dockerfile

    Image 的部分我們因為要執行 Python 所以就不使用 ubuntu-22.04 的映像了,直接使用別人包好的映像
    同時我們也在這個容器中安裝 Ollama 方便直接做使用,這時就不使用主機的服務了

    FROM python:3.10-slim
    
    RUN apt update && apt install curl -y
    RUN curl -fsSL https://ollama.com/install.sh | sh
    RUN bash -c "ollama serve &" && \
        sleep 5 && \
        ollama pull gemma2
    
    WORKDIR /home/app
    COPY * ./
    COPY .cache ./
    RUN chown -R root:root /home/app/.cache
    RUN pip3 install --no-cache-dir -r requirements.txt
    
    CMD bash -c "ollama serve &" && \
        python3 main.py
    
  • .docker_env

    # ollama
    OLLAMA_SERVER_URL=http://127.0.0.1:11434
    OLLAMA_HOST=127.0.0.1
    
    # qdrant
    QDRANT_URL=http://172.16.0.11:6333
    
  • docker-compose.yaml

    底下的 GPU device_ids 可以透過 nvidia-smi -L 取得

    https://ithelp.ithome.com.tw/upload/images/20241007/20146555vyA3voqcc8.png

    容器內的通訊我是使用 docker network 做溝通,而前面的 .docker_env 就是為了能讓 main-service 能與 qdrant-db 連線

    services:
      qdrant-db:
        image: qdrant/qdrant:latest
        networks:
          shared-network:
            ipv4_address: 172.16.0.11
        environment:
          TZ: "Asia/Taipei"
        restart: unless-stopped
        ports:
          - "6333:6333"
        volumes:
          - "./qdrant_storage:/qdrant/storage:z"
    
      main-service:
        depends_on:
          - qdrant-db
        build:
          context: .
          dockerfile: dockerfile
        environment:
          TZ: "Asia/Taipei"
        env_file: .docker_env
        ports:
          - "7860:7860"
        networks:
          shared-network:
            ipv4_address: 172.16.0.12
        deploy:
          resources:
            reservations:
              devices:
                - driver: nvidia
                  capabilities: [gpu]
                  device_ids: ["GPU-ab45ab7e-9a2a-6c22-d305-79dffdf1bf8c"] # GPU 
    
    networks:
      shared-network:
        driver: bridge
        ipam:
          config:
            - subnet: 172.16.0.0/24
    

一切就緒後,就可以在終端執行 docker compose up,並且在映像建置完成後即可以在瀏覽器中輸入 http://127.0.0.1:7860 確認服務是否有被起起來了~

https://ithelp.ithome.com.tw/upload/images/20241007/20146555ExQ4CVTZoP.png


上一篇
[Day 28] 進階設計 - 分頁跳轉
下一篇
[Day 30] [複習篇] Day 26 ~ Day28 周回複習
系列文
RAG自己來系列:客服機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言